<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.global.js"></script>
</head>
<body>
    <div id="app">
        <p>{{count}}</p>
        <p>{{doubleCount}}</p>
        <p>
            <button @click="count++">count++</button>
        </p>
        <hr>
        <p>
            {{zhang.name}}----{{zhang.age}}---{{zhang.info.height}}
        </p>
        <p>
            {{age}}
        </p>
        <p>
            <button @click="zhang.age++">age++</button>
            <button @click="age++">age++</button>
            <br>
            <button @click="zhang.info.height++">height++</button>
        </p>
    </div>
</body>
<script>
    let {createApp} = Vue;
    let {ref,reactive,readonly,computed,watch} = Vue;

    var app = createApp({
        
        setup(props) {

            let count = ref(100);  /// ref对象
            // console.log(count);

            let addCount = ()=>{
                count.value ++;
            }

            // zhang ->代理对象
            let zhang = reactive({// 目标对象
                name:"张三",
                age:18,
                info:{
                    height:173,
                    weight:65
                }
            });  // new Proxy(data,{get,set})
            // console.log(zhang);

            // 计算属性  ref对象
            let doubleCount = computed(()=>{
                return count.value * 2;
            })

            // age 新属性 => 依赖于zhang.age (计算属性默认是只读的)
            // let age = computed(()=>{
            //     return zhang.age;
            // })

            // age 新属性 => 依赖于zhang.age (计算属性默认是只读的,可以传入一个对象指定取值拦截和赋值拦截)
            let age = computed({
                get:()=>{
                    return zhang.age;
                },
                set:(val)=>{
                    zhang.age = val;
                }
            })


            return {
                // 键名: 传递出去的数据名 方法名  计算属性
                count:count,
                doubleCount,
                addCount,
                zhang,
                age,
            }
            
        },
        mounted() {
            // console.log("this",this);
        },
        // 选项式  计算属性默认是只读的, 可以传入一个对象指定取值拦截和赋值拦截
        // computed:{
        //     age:function(){

        //     },
        //     age:{
        //         get:function(){

        //         },
        //         set(){

        //         }
        //     }
        // }
    })

    app.mount("#app");








</script>
</html>